package com.shuaigef.springbootinit.service;

import com.shuaigef.springbootinit.model.entity.Post;
import com.baomidou.mybatisplus.extension.service.IService;
import com.shuaigef.springbootinit.common.Result;
import com.shuaigef.springbootinit.model.dto.req.post.*;
import com.shuaigef.springbootinit.model.dto.resp.post.GetPostByIdRespDTO;
import com.shuaigef.springbootinit.model.dto.resp.post.GetPostListRespDTO;
import com.shuaigef.springbootinit.model.dto.resp.post.GetPostSayBySayIdRespDTO;

import java.util.List;

/**
 * 帖子接口层
 */

public interface PostService extends IService<Post> {
    /**
     * 添加帖子
     *
     * @param requestParam 请求参数
     * @return 返回结果
     */
    Result<Void> addPost(AddPostReqDTO requestParam);

    /**
     * 根据id获取帖子信息
     *
     * @param id 帖子id
     * @return 返回结果
     */
    Result<GetPostByIdRespDTO> getPostById(Integer id);

    /**
     * 帖子点赞
     *
     * @param requestParam 请求参数
     * @return 返回结果
     */
    Result<Void> likePost(LikePostReqDTO requestParam);

    /**
     * 添加评论
     *
     * @param requestParam 请求参数
     * @return 返回结果
     */
    Result<Void> addSay(AddPostSayReqDTO requestParam);

    /**
     * 根据评论id获取评论信息
     *
     * @param requestParam  评论id
     * @param postId 帖子id
     * @return 评论信息
     */
    List<GetPostSayBySayIdRespDTO> getSays(Integer postId, GetPostSayReqDTO requestParam);

    /**
     * 修改帖子
     *
     * @param requestParam 请求参数
     * @return 返回结果
     */
    Result<Void> updatePost(UpdatePostByIdReqDTO requestParam);

    /**
     * 删除帖子
     *
     * @param requestParam 请求参数
     * @return 返回结果
     */
    Result<Void> deletePost(DeletePostByIdReqDTO requestParam);

    /**
     * 帖子取消点赞
     *
     * @param requestParam 请求参数
     * @return 返回结果
     */
    Result<Void> unlikePost(UnLikePostReqDTO requestParam);

    /**
     * 获取帖子列表
     *
     * @param requestParam 请求参数
     * @return 返回结果
     */
    List<GetPostListRespDTO> getPostList(GetPostListReqDTO requestParam);

    /**
     * 根据用户id获取帖子列表
     *
     * @param userId 用户id
     * @return 返回结果
     */
    List<GetPostListRespDTO> getPostByUserId(Integer userId);

    /**
     * 举报帖子
     *
     * @param requestParam 请求参数
     * @return 返回结果
     */
    Result<Void> report(ReportPostAndSayReqDTO requestParam);

    /**
     * 更新评论
     *
     * @param requestParam 请求参数
     * @return 返回结果
     */
    Result<Void> updateSay(UpdateSayReqDTO requestParam);

    /**
     * 删除评论
     *
     * @param requestParam 请求参数
     * @return 返回结果
     */
    Result<Void> deleteSay(DeletePostSayReqDTO requestParam);

    /**
     * 评论点赞
     *
     * @param requestParam 请求参数
     * @return 返回结果
     */
    Result<Void> likeSay(LikePostSayReqDTO requestParam);

    /**
     * 取消评论点赞
     *
     * @param requestParam 请求参数
     * @return 返回结果
     */
    Result<Void> unlikeSay(UnLikePostSayReqDTO requestParam);
} 